package dmdemo

import (
	"fmt"
	"sync"
	"time"

	"github.com/nick/vdamtools/pkg/dm1"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

var (
	db   *gorm.DB
	once sync.Once
	err  error
)

// InitDB 初始化数据库连接并设置连接池配置
func InitDB() {
	once.Do(func() {
		// 配置数据库连接字符串和日志模式
		// db, err = gorm.Open(dm1.Open("dm://DMTEST:DMTEST%400620@116.163.35.114:52360"), &gorm.Config{})
		// db, err = gorm.Open(dm1.Open("dm://DMTEST:DMTEST%400620@116.163.35.114:52360"), &gorm.Config{
		// 	Logger: logger.Default.LogMode(logger.Silent), // 设置为 Silent 模式以关闭 SQL 日志
		// })
		db, err = gorm.Open(dm1.Open("dm://DMTEST:DMTEST%400620@192.168.0.122:5236"), &gorm.Config{
			Logger: logger.Default.LogMode(logger.Silent), // 设置为 Silent 模式以关闭 SQL 日志
		})
		if err != nil {
			panic("failed to connect database")
		}

		// 获取通用数据库接口以配置连接池
		sqlDB, err := db.DB()
		if err != nil {
			panic("failed to get generic database object")
		}

		// 设置连接池配置
		sqlDB.SetMaxIdleConns(10)           // 设置空闲连接池中连接的最大数量
		sqlDB.SetMaxOpenConns(200)          // 设置打开数据库连接的最大数量
		sqlDB.SetConnMaxLifetime(time.Hour) // 设置可重用连接的最长时间

		// 迁移 schema
		db.AutoMigrate(&TerminalData{})
	})
}

// GetDB 获取数据库连接对象
func GetDB() *gorm.DB {
	return db
}

// InsertTerminalData 插入单条数据
func InsertTerminalData(td TerminalData) {
	fmt.Printf("insertTest................................................................\r\n")
	GetDB().Create(&td)
}

// InsertInBatchesTerminalData 批量插入数据
func InsertInBatchesTerminalData(tds []TerminalData) {
	GetDB().CreateInBatches(tds, len(tds))
}
